//  symbol  符号  全新的原始数据类型  避免对象属性名重复

// 为对象添加独一无的属性名

// const cache = {}

// //  a.js---------------
// cache['a_foo'] = Math.random()

// //  b.js---------------
// cache['b_foo'] = '123'

// console.log(cache)

// const s = Symbol()
// console.log(s)
// console.log(typeof s)

// console.log(
//     Symbol() === Symbol()
// )

// console.log(Symbol('foo'))
// console.log(Symbol('bar'))
// console.log(Symbol('baz'))


// const obj = {}
// // 不用担心冲突存在  每个Symbol 都是全新的
// obj[Symbol('foo')] = '123'
// obj[Symbol('foo')] = '456'
// console.log(obj)

// const obj = {
//     [Symbol('foo')]:123
// }
// console.log(obj)

// 私有属性
//  a.js---------------
// const name = Symbol()
// const person = {
//     [name]: 'zce',
//     say () {
//         console.log(this[name])
//     }
// }

// b.js--------------------
// person[Symbol()]  
// person.say()  //只能调用其它非私有的方法



// 复用相同属性值
// const s1 = Symbol.for('foo')
// const s2 = Symbol.for('foo')

// console.log(s1===s2)  // true

// // Symbol.for 会自动转换字符串  所以↓
// console.log(
//     Symbol.for(true) === Symbol.for('true')  // true
// )

// //for in 获取不到symbol值   keys也获取不到值
// for(let key in obj){
//     console.log(key)
// }
// console.log(Object.keys(obj))

// // 如果需要获取 使用 Object.getOwnPropertySymbols
// console.log(Object.getOwnPropertySymbols(obj))